
/**
 * Tab 辅助类
 * Power By： EdiChan
 * Date：2024-04-13
 */

import router from "@/router";

class TabHelper {

    constructor() {

        //Tab 集合
        this.TabList = [];

        //当前是否为首页
        this.IsHome = false;
 

        //首页地址
        this.HomePath = '/Dashboard';
    }

    /**
     * 选中Tab
     * @param {*} menu  菜单对象
     * @returns 
     */
    CheckedTab(menu) {

        //跳转页面
        this.RouterPush(menu.path);
        this.IsHome = false;

        //初始化选中状态(此处必须重新赋值，否则无法监听到属性更改)
        let list=this.TabList.map(x => { x.active = false; return x;})


        //如果为首页
        if (menu.name == '首页') {
            this.IsHome = true;
            this.TabList=list;
            //持久化处理
            localStorage.TabList = JSON.stringify(list);
            return;
        }

        //如果页面存在则选中，否则新增页面
        let tab = list.find(x => x.name == menu.name);
        if (tab) {
            tab.active = true;
        }
        else {
            list.push({
                name: menu.name,
                path: menu.path,
                active: true,
                icon: menu.icon
            })
        }


        this.TabList=list;
        //持久化处理
        localStorage.TabList = JSON.stringify(list);

    }


    /**
     * 关闭单个Tab
     */
    CloseTab(menu) {
        this.IsHome = false;

        //查找当前需要关闭的Tab 并从数组中移除
        let index = this.TabList.findIndex(x => x.name == menu.name);
        this.TabList.splice(index, 1);


        //判断是否存在前一个Tab，存在则默认选择
        if (index > 0) {

            //初始化选中状态(此处必须重新赋值，否则无法监听到属性更改)
            let list=this.TabList.map(x => { x.active = false; return x;})

            let item = list[index - 1];
            item.active = true;
            //跳转页面
            this.RouterPush(item.path);
            this.TabList=list;

        }
        else {
            //选择首页
            this.IsHome = true;
            this.RouterPush(this.HomePath);
        }
        //持久化处理
        localStorage.TabList = JSON.stringify(this.TabList);

    }

    /**
     * 关闭所有Tab
     */
    CloseAllTab() {

        //清空集合
        this.TabList = [];

        //持久化处理
        localStorage.TabList = JSON.stringify(this.TabList);

        //选中首页
        this.IsHome = true;


        //跳转页面
        this.RouterPush(this.HomePath);
    }



    //跳转页面
    RouterPush(path) {
        if (router.history.current.fullPath != path) {
            router.push({ path: path });
        }
    }

    /**
     * 初始化TabList（页面刷新后）
     */
    InitTab() {
        let list = localStorage.TabList || undefined;
        if (list) {
            this.TabList = JSON.parse(list);
        }

        //如果刷新后 没有打开的tab 默认打开home
        if (this.TabList.length <= 0) {
            this.IsHome = true;
        }
        else{
            //如果打开了tab  但是没有选中的tab  则选择首页
            let item = this.TabList.find(x=>x.active);
            if(!item){
                this.IsHome = true;
            }
            else
            {
                //跳转当前页面
                this.RouterPush(item.path);
            }
        }
    }
}


export default new TabHelper();